package com.ciwong.epaper.modules.otherlogin;

import android.text.TextUtils;


import com.tencent.mm.opensdk.constants.ConstantsAPI;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.modelmsg.SendAuth;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;

import java.util.Random;

/**
 * 此类实现微信登录授权相关操作 Created by res-dlzhou on 2015/9/2.
 */
public abstract class WeixinLoginAction extends AbsOtherLogin
{
    /**
     * 微信API
     */
    private IWXAPI mWeixinAPI;

    /**
     * 登录授权请求
     */
    private SendAuth.Req req;

    /**
     * 登录授权请求结果
     */
    private SendAuth.Resp resp;

    /**
     * 默认为false，true时须要对结果进行处理
     */
    private boolean isNeedDealWithResult = false;

    public IWXAPI getIWXAPI()
    {
        initIWXAPI();
        return mWeixinAPI;
    }

    /**
     * 微信授权登录动作(调用此方法启动第三方登录授权界面)
     */
    public void loginWithWeixinAction()
    {
        initIWXAPI();
        mWeixinAPI.registerApp(getLoginConfig().getWeixinAppId());
        if (req == null)
        {
            req = new SendAuth.Req();
        }
        req.scope = "snsapi_userinfo";
        req.state = String.valueOf(new Random().nextInt(10000));// 防止csrf攻击
        mWeixinAPI.sendReq(req);
    }

    /**
     * 初始化微信API
     */
    private void initIWXAPI()
    {
        if (mWeixinAPI == null)
        {
            mWeixinAPI = WXAPIFactory.createWXAPI(mActivity,
                    getLoginConfig().getWeixinAppId());
        }
        if (!mWeixinAPI.isWXAppInstalled())
        {
            // 提醒用户没有按照微信
            return;
        }
    }

    /**
     * 回收资源
     */
    protected void releaseIWXAPI()
    {
        if (mWeixinAPI != null)
        {
            mWeixinAPI.unregisterApp();
            mWeixinAPI = null;
        }
    }

    /**
     * 处理WXEntryActivity类回调的onReq结果
     * 
     * @param baseReq
     */
    public void dealWithWeixinOnResp(BaseReq baseReq)
    {
        switch (baseReq.getType())
        {
            case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:
                break;
            case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
                break;
            default:
                break;
        }
    }

    /**
     * 处理WXEntryActivity类回调的onResp结果
     * 
     * @param baseResp
     */
    public void dealWithWeixinOnResp(BaseResp baseResp)
    {
        if (baseResp != null)
        {
            resp = (SendAuth.Resp) baseResp;
            isNeedDealWithResult = true;
        }
    }

    /**
     * 微信结果回调(此方法须在onResume()方法中执行)
     */
    public void onResumeResultData()
    {
        if (isNeedDealWithResult)
        {
            isNeedDealWithResult = false;
            switch (resp.errCode)
            {
                // 用户同意
                case BaseResp.ErrCode.ERR_OK:
                    // 授权成功
                    if (TextUtils.equals(resp.state, req.state))
                    {
                        mListener.onLoginComplete(LoginType.WEIXIN, resp);
                    }
                    break;
                // （用户拒绝授权）
                case BaseResp.ErrCode.ERR_AUTH_DENIED:
                    mListener.onLoginError(LoginType.WEIXIN, resp.errCode,
                            resp.errStr);
                    break;
                // （用户取消）
                case BaseResp.ErrCode.ERR_USER_CANCEL:
                    mListener.onLoginCancel();
                    break;
                default:
                    break;
            }
        }
    }
}
